<?php

namespace App\Models\Trip\OrderPay\Repositories\Interfaces;


use App\Models\Common\Channel\Channel;
use App\Models\Plane\PlaneOrders\PlaneOrder;
use App\Models\Scenic\ScenicOrder;
use App\Models\Train\TrainOrders\TrainOrder;
use App\Models\Trip\OrderPay\OrderPay;
use App\Models\Trip\RefundNeedPay\RefundNeedPay;
use App\Models\Trip\SnapTaskUpgradePay\SnapTaskUpgradePay;
use App\Trip\Orders\BookOrders\TaskEdit\TaskEditOrder;
use App\Trip\Wechat\Pay\PayRes\PayResult;
use App\Trip\Wechat\Pay\WechatPay;

interface OrderPayRepositoryInterface
{
    public function createTrainOrderPayInfo(TrainOrder $order, WechatPay $pay, Channel $channel): OrderPay;

    public function createPlaneOrderPayInfo(PlaneOrder $order, WechatPay $pay, Channel $channel): OrderPay;

    public function createScenicOrderPayInfo(ScenicOrder $order, WechatPay $pay, Channel $channel): OrderPay;

    public function createTrainSnapTaskEditPay(TrainOrder $order, TaskEditOrder $taskEditOrder, WechatPay $pay, Channel $channel): OrderPay;

    public function findOneByPaySn(string $pay_sn): OrderPay|null;

    public function updateOne(OrderPay $order_pay_info, array $data): bool;

    public function updatePayByPayResult(string $pay_sn, PayResult $result);

    public function createTrainOrderRefundNeedPay(RefundNeedPay $pay): OrderPay;

    public function createTrainSnapTaskUpgradePay(SnapTaskUpgradePay $pay): OrderPay;

}